    package main // 声明主包

import (
    "encoding/json" // JSON 编码解码
    "net/http"      // HTTP 服务
    "strconv"       // 字符串转换
)

// Response 定义返回数据结构
type Response struct {
    Input  int `json:"input"`  // 原始输入
    Result int `json:"result"` // 计算结果
}

func main() {
    // 注册 /api/calc 路由和处理函数
    http.HandleFunc("/api/calc", func(w http.ResponseWriter, r *http.Request) {
       // 设置响应内容类型为 JSON
       w.Header().Set("Content-Type", "application/json")
       // 读取 URL 查询参数 num
       numStr := r.URL.Query().Get("num")
       // 尝试把 num 转为整数
       num, err := strconv.Atoi(numStr)
       if err != nil {
          // 转换失败返回错误信息
          http.Error(w, `{"error":"num必须是数字"}`, http.StatusBadRequest)
          return
       }
       // 计算 2*num + 1
       res := num*2 + 1
       // 构造响应对象
       rsp := Response{Input: num, Result: res}
       // 编码并写入响应
       json.NewEncoder(w).Encode(rsp)
    })

    // 提供 static 目录下的静态文件
    fs := http.FileServer(http.Dir("static"))
    http.Handle("/", fs)

    // 启动服务器，监听 8080 端口
    http.ListenAndServe(":8080", nil)
}
